package com.zlk.algorithm.huawei.nowcoder.string;


import java.util.Scanner;

/**
 * @program: algorithm
 * @ClassName HJ26
 * @description: 字符串排序
 *
 * @author: slfang
 * @create: 2024-12-23 16:01
 * @Version 1.0
 **/
public class HJ26 {

    //1、文字母从 A 到 Z 排列，不区分大小写
    //2、同一个英文字母的大小写同时存在时，按照输入顺序排列。
    //3、非英文字母的其它字符保持原来的位置。
    // EjMay
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            String str = in.nextLine();
            str = sort(str);
            System.out.println(str);
        }
    }

    private static String sort(String str) {
        int length = str.length();
        char[] letter = new char[str.length()];
        char[] ansChar = new char[str.length()];
        int letterIndex =0;
        String ans = "";
        //拆分字母与非字母
        for (int i = 0; i < length; i++) {
            char c = str.charAt(i);
            if(Character.isLetter(c)){
                //字母
                letter[letterIndex++] = c;
                //插入排序
                int index = letterIndex-1;
                while (index>0&&
                        Character.toLowerCase(letter[index])<Character.toLowerCase(letter[index-1])){
                    char temp = letter[index];
                    letter[index] = letter[index-1];
                    letter[index-1] = temp;
                    index--;
                }
            }else{
                ansChar[i]=c;
            }
        }
        int aIndex = 0;
        int bIndex = 0;
        while (aIndex<letterIndex||bIndex<length){
            if(ansChar[bIndex]!='\u0000'){
                bIndex++;
            }else{
                ansChar[bIndex] = letter[aIndex++];
            }
        }
        return new String(ansChar);
    }

}
